package com.base.factory.simplefactory.factory;

import com.base.factory.simplefactory.service.ComputerService;
import com.base.factory.simplefactory.service.impl.Asus;
import com.base.factory.simplefactory.service.impl.Dell;
import com.base.factory.simplefactory.service.impl.ThinkPad;

/**
 * Created by xingyuchao on 2017-06-17.
 * 生产电脑的工厂类 对于消费者来说 ，不必去关系生产的过程.只会关心结果
 * 对于这个工厂来说(太强大了),不太合理 为什么？
 * 这个工厂啥都能干(不符合现实)
 * 编码也是一种艺术(融汇贯通),艺术来源于生活，回归到生活的
 */
public class ComputerFactory {

    //Spring中的工厂模式
    //Bean
    //BeanFactory（生成Bean）
    //单例的Bean
    //被代理过的Bean
    //最原始的Bean（原型）
    //List类型的Bean
    //作用域不同的Bean

    //getBean
    //非常的紊乱，维护困难
    //解耦（松耦合开发）

    public ComputerService prodution(String computerName){

        if("Asus".equals(computerName)){
            return new Asus();
        }else if("Dell".equals(computerName)){
            return new Dell();
        }else if("ThinkPad".equals(computerName)){
            return new ThinkPad();
        }else{
            return null;
        }

    }


    public ComputerService prodution1(Class clazz){
        try{
            ComputerService o = (ComputerService)clazz.newInstance();
            if(o instanceof Asus){
                return o;
            }else if(o instanceof Dell){
                return o;
            }else if(o instanceof ThinkPad){
                return o;
            }else{
                return null;
            }
        }catch (Exception e){}
        return null;
    }


    public ComputerService prodution2(Class clazz){
        try{
            ComputerService o = (ComputerService)clazz.newInstance();
            if(clazz == Asus.class){
                return o;
            }else if(clazz == Asus.class){
                return o;
            }else if(clazz == Asus.class){
                return o;
            }else{
                return null;
            }
        }catch (Exception e){

        }
        return null;
    }
}
